package response

import (
	"github.com/gin-gonic/gin"
	"net/http"
)

// Result 响应结果数据
type Result struct {
	Code    int    `json:"code"`    //响应码，0为成功，其他均为失败
	Message string `json:"message"` //消息
	Data    *any   `json:"data"`    //数据
}

// PageData 分页数据
type PageData struct {
	List  *any  `json:"list"`
	Total int64 `json:"total"`
}

// PageResult 响应分页数据
type PageResult struct {
	Code    int      `json:"code"`    //响应码，0为成功，其他均为失败
	Message string   `json:"message"` //消息
	Data    PageData `json:"data"`
}

// OK 成功响应数据
func OK(c *gin.Context, data any) {

	c.SecureJSON(http.StatusOK, &Result{
		Code:    SUCCESS,
		Message: "success",
		Data:    &data,
	})
}

// ERROR 一般错误响应数据，HTTP状态码为：200
func ERROR(c *gin.Context, code int, message string) {

	c.JSON(http.StatusOK, &Result{
		Code:    code,
		Message: message,
		Data:    nil,
	})
}

// Failed 失败响应数据,需要设置HTTP响应状态码时候使用
func Failed(c *gin.Context, status int, code int, message string) {

	c.JSON(status, &Result{
		Code:    code,
		Message: message,
		Data:    nil,
	})
}

// Page 响应分页数据，total:记录数，data:分页数据
func Page(c *gin.Context, total int64, data any) {
	c.JSON(http.StatusOK, &PageResult{
		Code:    SUCCESS,
		Message: "success",
		Data: PageData{
			List:  &data,
			Total: total,
		},
	})
}